home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
basic
/
pbtool.exe
/
SMSORT.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-07-30
|
4KB
|
111 lines
'----------------------------------------------------------
' PROGRAM: SMSORT1.BAS PROGRAMMER: A. KELLETT
' DATE-WRITTEN: 07/30/91
' USING POWER BASIC V2.10A
'
' THIS PROGRAM DEMONSTRATES A SHELL-METZNER SORT
'
' VERSION: 0.00 LAST UPDATED: 00/00/00
'----------------------------------------------------------
CLS:LOCATE 1,25:PRINT "A TEST PROGRAM FOR A SHELL-METZNER SORT"
X$ = "":N% = 0
LOCATE 3,5:PRINT "ITEMS TO BE SORTED: "
DO WHILE X$ <> "EOD"
READ X$
IF X$ <> "EOD" THEN
N% = N% + 1
END IF
LOCATE 3,26:PRINT USING "#,###";N%
WEND
RESTORE :REM *** RESTORE DATA POINTER TO FIRST DATA ITEM
DIM NAMES$(1:N%)
DELAY 1.5
LOCATE 5,5:PRINT "ITEMS READ INTO TABLE: "
FOR I% = 1 TO N%
READ NAMES$(I%)
LOCATE 5,29:PRINT USING "#,###";I%
NEXT I%
DELAY 1.5
CALL SORTNAMES
'---------- DISPLAY RESULTS OF SORT --------------------------
CLS
FOR I = 1 TO N%
PRINT USING "#,### \ \";I,NAMES$(I)
IF I/15 = INT(I/15) THEN
DELAY 2 :REM *** PAUSE FOR EVERY 15 ITEMS DISPLAYED ***
END IF
NEXT I
PRINT USING "IT TOOK ##.### SECONDS FOR THE SORT ";(ELAPSEDTIME! / 100000)
PRINT USING "TIME STARTED: \ \ AND TIME FINISHED: \ \";_
STARTTIME$, ENDTIME$
END
'
'
' A SHELL-METZNER SORT TO SORT STRINGS IN ASCENDING ORDER.
'
' To use: this module uses names$(),starttime$,endtime$,n,interval,
' temp$,diff,item1,item2. item2,diff,temp are local variables.
' all others are shared. names$() must be dimensioned and
' filled with the strings to be sorted. n is the size of
' the array to be sorted. starttime$ and endtime$ are
' coded merely for the convenience of timing the sort.
'
' ---- This module uses a shell-metzner sort, developed by ------
' ---- Donald Shell & Marlene Metzner. A high-speed , ------
' ---- intelligent sort. This version translated from ------
' ---- a Commodore version by Raeto Collin West. ------
SUB SORTNAMES
shared names$(),starttime$,endtime$,n%
shared elapsedtime!:mtimer:starttime$ = time$
m% = n%
label1:
m% = fix(m%/2)
IF m% = 0 THEN
elapsedtime! = mtimer
endtime$ = time$
exit sub
END IF
j% = 1:k% = n% - m%
label3:
i% = j%
label2:
l% = i% + m%
IF names$(i%) > names$(l%) THEN
swap names$(i%), names$(l%)
i% = i% - m%
IF i% > 0 THEN
goto label2
END IF
END IF
j% = j% + 1
IF j% > k% THEN
goto label1
END IF
goto label3
END SUB
'
' NAMES HELD IN DATA STATEMENTS
'--------------------------------------------------------------------
DATA "BILLYBOB","ZEUS","ZENO","LARRY","DARRYL","DARRELL","JANE"
DATA "EDWARD","EDGAR","AUGUSTUS","ANTHONY","STEPHANIE","STEVE"
DATA "BOB","ANGEL","JEAN","TOMMY","NANSI","SCOTT","BILLY","LINDA"
DATA "LAUREN","SCOTTY","JILL","LIZ","ELIZABETH","WHITNEY","JOSEPH"
DATA "HANNAH","CINDY","JOHN","MYRA","PETER","LANA","JASON"
DATA "MIKE","HOWARD","GARFIELD","SNOOPY","CHARLIE","LINUS"
DATA "LUCY","ANDY","JIMBOB","BETTY","JIMMIE","JAMES","WILLIAM"
DATA "DAVID","ABBYE","SHIRLEY","LEONARD","LOUISE","KEVIN","JANICE"
DATA "PHIL","LYNDA","KATHY","DEMYRA","LISA","CATHY","CHARLEEN"
DATA "CHRIS","JOHNNY","JOANN","JACK","IRENE","WANDA","ANNE"
DATA "BILL","RONNY","EMILY","JANE","JOAN","BETSY","ELAINE"
DATA "HERBERT","MICHAEL","DANNY","DUSTY","YVONNE","VANNA"
DATA "PAT","PATRICK","PATSY","PATTY","PENNY","OLIVIA","OSCAR"
DATA "GERALDINE","MANDY","MISTY","NELLIE","MICHELLE","JENNY"
DATA "FRANK","FANNY","RANDY","JERRY","CAROL","CAROLINE","LORETTA"
DATA "GILBERT","ESTHER","JIM","SUE","CHARLES","BRYAN","FARRELL"
DATA "BARRY","THOMAS","RAMOSES"
DATA "DONALD","MARLENE","EOD"